Published on January 20, 2025

备用返回通道

转到题目

题目描述:

给定一个由 n 个整数构成的数组 a1,a2,,an,我们称这个数组为“数独数组”,当且仅当其每个长度为 9 的连续子数组都包含数字 1 到 9。

现在,要求判断是否存在一种方案,可以通过重新排序数组使得数组成为数独数组。如果可以,则输出 “YES”;否则输出 “NO”。

输入描述:

输出描述:

示例 1:

输入:

9
1 2 3 4 5 6 7 9 8

输出:

YES

解释: 在这个示例中,数组已经满足数独数组的条件,不需要重新排序。

示例 2:

输入:

9
1 2 3 4 5 6 7 8 1

输出:

NO

解释: 这个数组不能通过重新排序变成数独数组,因为数字 1 出现了两次,而缺少了其他数字(例如 9)。

解析:

一定要仔细读题,不要着急。确定了之后再码。

思路引导

python代码

n = int(input())

li = list(map(int,input().split()))
cnt = [0]*9
for i in li:
    cnt[i-1]+=1
if(max(cnt)-min(cnt) >1):
    print("NO")
else:
    print("YES")

cpp

#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
int n;
int cnt[9];
signed main(){
    cin>>n;
    int chace;
    int MAX = 0;
    int MIN = inf;
    while(n--){
        cin>>chace;
        cnt[chace-1]++;
    }
    for (int i = 0 ;i<9;i++){
        MAX = max(MAX,cnt[i]);
        MIN = min(MIN,cnt[i]);
    }
    if (MAX-MIN >1) cout<<"NO"<<endl;
    else cout<<"YES"<<endl;
    return 0;
}